<?php
class AppModel extends Model{

    var $actsAs = array('Containable','transaction');
    var $PI_IDCUENTA = 99;
    var $XML_TAGS = array(
        'header'=>'<?xml version="1.0" encoding="utf-8"?>',
        'items'=>'<items>%s</items>',
        'item'=>'<item>%s</item>',
        'field'=>'<item-field name="%s" value="%s" />'
    );
    var $documentosConCreditoFiscal = array('101','105','106','107','108','112','113','114','150');
    var $months = array(1=>'ENERO',2=>'FEBRERO',3=>'MARZO',4=>'ABRIL',5=>'MAYO',6=>'JUNIO',7=>'JULIO',
        8=>'AGOSTO',9=>'SETIEMBRE',10=>'OCTUBRE',11=>'NOVIEMBRE',12=>'DICIEMBRE');
	        
    function restaFechas($dFecIni, $dFecFin){
        $dFecIni = str_replace('-','',$dFecIni);
        $dFecIni = str_replace('/','',$dFecIni);
        $dFecFin = str_replace('-','',$dFecFin);
        $dFecFin = str_replace('/','',$dFecFin);

        ereg( '([0-9]{1,2})([0-9]{1,2})([0-9]{2,4})', $dFecIni, $aFecIni);
        ereg( '([0-9]{1,2})([0-9]{1,2})([0-9]{2,4})', $dFecFin, $aFecFin);

        $date1 = mktime(0,0,0,$aFecIni[2], $aFecIni[1], $aFecIni[3]);
        $date2 = mktime(0,0,0,$aFecFin[2], $aFecFin[1], $aFecFin[3]);

        return round(($date2 - $date1) / (60 * 60 * 24));
    }

    function setFlash($message, $layout = 'default', $params = array(), $key = 'flash') {
        $_SESSION['Message'][$key] = compact('message', 'layout', 'params');
    }
    
    /*
    funcion para validar dependencia con otros campos
    params:
            $check	:	valor a verificar
            $field	:	nombre del campo del que se depende
    ejemplo:
            'almacen_id'=>array(
                    'rule'=>array('validateDependency', 'empresa_id'),
                    'message'=>'debe seleccionar una empresa'
            )
    */
    function validateDependency($check, $field){
        return !empty($this->data[$this->name][$field]);
    }



    function empresaId(){
        return $_SESSION['Usuario']['Tercero']['empresa_id'];
    }

    function centroDistId(){
        return $_SESSION['Usuario']['Tercero']['centro_dist_id'];
    }
	
    /*
    function ejercicioId(){
        return $_SESSION['Ejercicio']['id'];
    }

    function periodoId(){
        return $_SESSION['Ejercicio']['Actual']['periodo_id'];
    }
*/
    function usuarioId(){
        return $_SESSION['Usuario']['id'];
    }

    function fechaTrabajo(){
        return $_SESSION['Ejercicio']['Actual']['fecha'];
    }

    function carpetaId(){
        return isset($_SESSION['Ejercicio']['Actual']['carpeta_id'])?$_SESSION['Ejercicio']['Actual']['carpeta_id']:1;
    }
    
    /*
    *función para reglas de validación. Verifica multiples columnas como Unique
    *@param string $data. la columna a ser validada...
    *@param array $fields. los campos que conforman la clave Unique
    *@example
       var $validate = array(
          'first_column' => array(
                'unique' => array(
                    'rule' => array('checkUnique', array('first_column', 'second_column', 'third_column')),
                    'message' => 'el valor no es unico, verifique los valores e intente nuevamente.',
                )
            ),...);
    **/
    function checkUnique($data, $fields)
    {
        //verificar si el parametro contiene multiples columnas o solo una
        if (!is_array($fields)){
            $fields = array($fields);
        }
    
        foreach($fields as $key){
            $unique[$key] = $this->data[$this->name][$key];
        }
    
        //el valor de la clave primaria debe ser diferente del valor posteado
        if (isset($this->data[$this->name][$this->primaryKey])){
            $unique[$this->primaryKey] = "<>" . $this->data[$this->name][$this->primaryKey];
        }
        
        //utilizar la función isUnique del modelo para verificar la regla unique
        return $this->isUnique($unique, false);
    }
    
	function ejercicioId($date = null){
		$this->bindModel(array('belongsTo'=>array('Ejercicio')));
		$times = explode(' ', $date);
		if(count($times) == 2 ){
			$date = $times[0];	
		}	
		$newDate = explode('-',$date ); 
		if(strlen($newDate[0])==4){
			$anio = $newDate[0];
			$newDate[0] = $newDate[2];
			$newDate[2] = $anio;
			$date = implode('-', $newDate);
		}
        if (empty($date)){
            if (isset($_SESSION['Ejercicio']['id']))
                return $_SESSION['Ejercicio']['id'];
            else {
                $ejercicio = $this->Ejercicio->find('first',array(
                    'conditions'=>array(
                        'codigo'=>date('Y'),
                        'activo'=>true
                    ),
                    'recursive'=>-1
                ));
                return $ejercicio['Ejercicio']['id'];
            }
        } else {
        	if(is_array($date)){
        		$date[2] = $date['year'];	
        	} else {
	            if (strpos($date,'-') != false)
	                $date = explode('-',$date);
	            else
	                $date = explode('/',$date);
        	}

            $ejercicio = $this->Ejercicio->find('first',array(
                'conditions'=>array(
                    'codigo'=>$date[2],
                    'activo'=>true
                ),
                'recursive'=>-1
            ));
            return $ejercicio['Ejercicio']['id'];
        }
    }
	
    function periodoId($date = null){
    	$times = explode(' ', $date);
		if(count($times) == 2 ){
			$date = $times[0];	
		}	
		$newDate = explode('-',$date ); 
		if(strlen($newDate[0])==4){
			$anio = $newDate[0];
			$newDate[0] = $newDate[2];
			$newDate[2] = $anio;
			$date = implode('-', $newDate);
		}
        if (empty($date)){
            if (isset($_SESSION['Ejercicio']['Actual']['periodo_id']))
                return $_SESSION['Ejercicio']['Actual']['periodo_id'];
            else
                return date('m');
        } else {
        	if(is_array($date)){
        		$date[1] = $date['month'];	
        	} else {	
	            if (strpos($date,'-') != false)
	                $date = explode('-',$date);
	            else
	                $date = explode('/',$date);
        	}
            return $date[1];
        }
    }
}
?>